package net.siufung.security.api.provider;

/**
 * @author 陈建峰
 * @date 2022/10/18 4:51 下午
 * @since V1.0.0
 */
public interface IAccessPermitProvider {

    /**
     * 满足一个权限标识 @PreAuthorize("@permit.has('')")
     * @param permit 权限标识
     * @return Boolean
     */
    default Boolean has(String permit){
        return this.checkPermitValid(PermitProviderEnum.ONE, permit);
    };

    /**
     * 同时满足多个权限标识 @PreAuthorize("@permit.hasAll('')")
     * @param permits 权限标识集合
     * @return Boolean
     */
    default Boolean hasAll(String[] permits){
        return this.checkPermitValid(PermitProviderEnum.ALL, permits);
    }

    /**
     * 满足其中任何一个权限标识 @PreAuthorize("@permit.hasAny('')")
     * @param permits 权限标识集合
     * @return Boolean
     */
    default Boolean hasAny(String[] permits){
        return this.checkPermitValid(PermitProviderEnum.ANY, permits);
    }

    /**
     * 验证权限有效行
     * @param permitProviderEnum 权限规则枚举
     * @param permit 权限
     * @return 是否有效
     */
    Boolean checkPermitValid(PermitProviderEnum permitProviderEnum, String... permit);

}
